﻿-------------------------------------------------------------------------------
-- Памятливый редактор. © SimSU
-------------------------------------------------------------------------------

---- Настройки
local function Settings()
-- Начало файла Profile\SimSU\Editor_Retentive.cfg
return{
  Key="F10 Esc F4 F6"; --Prior=50;

  Enable=true; -- Запоминать состояние?
}
-- Конец файла Profile\SimSU\Editor_Retentive.cfg
end

---- Локализация
_G.far.lang=far.lang or win.GetEnv("farlang")
-- Встроенные языки / Buildin laguages
local function Messages()
if far.lang=="Russian" then
-- Начало файла Profile\SimSU\Editor_RetentiveRussian.lng
return{
  Descr="Памятливый редактор. © SimSU";
}
-- Конец файла Profile\SimSU\Editor_RetentiveRussian.lng
else--if far.lang=="English" then
-- Begin of file Profile\SimSU\Editor_RetentiveEnglish.lng
return{
  Descr="Памятливый редактор. © SimSU";
}
-- End of file Profile\SimSU\Editor_RetentiveEnglish.lng
end end

local M=(loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Editor_Retentive"..far.lang..".lng") or Messages)()
local S=(loadfile(win.GetEnv("FARLOCALPROFILE").."\\SimSU\\Editor_Retentive.cfg") or loadfile(win.GetEnv("FARPROFILE").."\\SimSU\\Editor_Retentive.cfg") or Settings)()

local SimSU=SimSU or {}
SimSU.Editor_Retentive={}
-------------------------------------------------------------------------------
local Editor_Retentive={}

function SimSU.Editor_Retentive.GetState()
  local State=editor.GetInfo()
  if State.BlockType~=0 then
    local Sel=editor.GetSelection() -- НЕ РАБОТАЕТ при EE_CLOSE
    if Sel then State.BlockStartLine,State.BlockStartPos,State.BlockHeight,State.BlockWidth = Sel.StartLine, Sel.StartPos, Sel.EndLine-Sel.StartLine+1, Sel.EndPos-Sel.StartPos+1 end
  end
  return State
end

function SimSU.Editor_Retentive.SetState(State)
  editor.SetParam(nil,far.Flags.ESPT_TABSIZE,State.TabSize,nil)
  editor.Select(nil,State)
  editor.SetPosition(nil,State)
--  require"le"(State)
end

function SimSU.Editor_Retentive.Close()
  local State=SimSU.Editor_Retentive.GetState()
  Editor_Retentive[State.FileName]=State
end

function SimSU.Editor_Retentive.Open()
  if Editor_Retentive[editor.GetFileName()] then SimSU.Editor_Retentive.SetState(Editor_Retentive[editor.GetFileName()]) end
end
-------------------------------------------------------------------------------
if not Macro then return {Editor_Retentive=SimSU.Editor_Retentive} end

local ok, mod = pcall(require,"SimSU.Editor_Retentive"); if ok then SimSU=mod else _G.SimSU=SimSU end
-------------------------------------------------------------------------------

--Event {group="EditorEvent"; priority=S.Prior; description=M.Descr;
--  condition=function(Id,Event,Param) return S.Enable and Event==far.Flags.EE_CLOSE end;
--  action=SimSU.Editor_Retentive.Close;
--} -- НЕ РАБОТАЕТ так, короче всё по старинке на клавиши повесим...
Macro {area="Editor"; key=S.Key; priority=S.Prior; description=M.Descr;
  condition=function() return S.Enable end;
  action=function() SimSU.Editor_Retentive.Close(); Keys("AKey") end;
}

Event {group="EditorEvent"; priority=S.Prior; description=M.Descr;
  condition=function(Id,Event,Param) return S.Enable and Event==far.Flags.EE_READ end;
  action=SimSU.Editor_Retentive.Open;
}
